package com.york.jobmew.circle.server.config.websocket;

import com.alibaba.nacos.common.utils.CollectionUtils;
import org.springframework.stereotype.Component;

import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
import java.util.List;
import java.util.Map;

/**
 * websocket服务端配置
 */
@Component
public class WebSocketServerConfig extends ServerEndpointConfig.Configurator {

    /**
     * 禁用跨域检查（允许所有来源连接）
     *
     * @param originHeaderValue 允许所有来源的WebSocket连接请求
     * @return
     */
    @Override
    public boolean checkOrigin(String originHeaderValue) {
        return true;
    }

    /**
     * 在WebSocket握手阶段，通过解析HTTP请求参数，提取erp参数并存入WebSocket会话的UserProperties中
     * 获取请求参数：从HandshakeRequest中提取所有URL参数
     * 存储用户属性：若erp参数存在，将其存入sec.getUserProperties()，后续通过Session对象可全局访问此参数
     * 这里的Session并不是HttpSession（如session.getUserProperties().get("erp")）。
     *
     * @param sec
     * @param request
     * @param response
     */
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        Map<String, List<String>> parameterMap = request.getParameterMap();
        List<String> erpList = parameterMap.get("erp");
        if (!CollectionUtils.isEmpty(erpList)) {
            sec.getUserProperties().put("erp", erpList.get(0));
        }
    }

}
